public class Test3 {
    //装箱和拆箱
    public static void main1(String[] args) {
        int i = 10;
        //装箱操作：新建一个Integer类型的对象，将i的值放入对象的某个属性中
        Integer ii = Integer.valueOf(i);
        Integer ij = new Integer(i);

        //拆箱操作：将Integer对象中的值取出，放到一个基本数据类型中去
        int j = ii.intValue();
    }

    //自动装箱和自动拆箱
    public static void main2(String[] args) {
        int i = 10;

        Integer ii = i; //自动装箱
        Integer ij = (Integer) i; //自动装箱

        int j = ii; //自动拆箱
        int k = (int)ii; //自动拆箱
    }

    public static void main(String[] args) {
        Integer a = 127;
        Integer b = 127;
        Integer c = 128;
        Integer d = 123;
        //自动装箱的范围在（-128）- 127
        //如果在这个范围之内装箱时都是装成同一个，所以对象的地址是一样的，超出范围时，会重新创建一个对象
        System.out.println(a == b); //true
        System.out.println(c == d); //false
    }
}
